Hledani v ListView WAS: Mnoho polozek v TListView

Otázka od: Jiri Cincura

13. 8. 2004 15:25

Ahoj,
  chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti na
TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve virtualnim
modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde bych
si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu vic
(pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z teto
prekerni situace?

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Martin Cajbik

13. 8. 2004 16:24

Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi rychle.
Skor by som hladal problem v naslednom spracovani udajov (neviem co
presne obnasa v tomto pripade "vybrat vsechny Caption"). Pokial by si to
prechadzanie chcel predsa len o nieco urychlit, mozes pouzit nieco
taketo (v tomto pripade sa Caption ulozi do TMemo).

var
   i, j: Integer;
begin
   Memo1.Lines.BeginUpdate;
   j:= ListView1.SelCount;
   for i:= ListView1.Selected.Index to ListView1.Items.Count-1 do
     if ListView1.Items[i].Selected then
     begin
       Memo1.Lines.Add(ListView1.Items[i].Caption);
       Dec(j);
       if j = 0 then
         break;
     end;
   Memo1.Lines.EndUpdate;

Martin Cajbik

Jiri Cincura wrote:
> Ahoj,
> chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti na
> TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve virtualnim
> modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
> vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde bych
> si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu vic
> (pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z teto
> prekerni situace?

Odpovedá: Jiri Cincura

13. 8. 2004 16:42

Martin Cajbik wrote:
> Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi
> rychle.
> Skor by som hladal problem v naslednom spracovani udajov (neviem co
> presne obnasa v tomto pripade "vybrat vsechny Caption"). Pokial by si

Item[Cnt].Caption jsem myslel, ale to je jedno

> to prechadzanie chcel predsa len o nieco urychlit, mozes pouzit nieco
> taketo (v tomto pripade sa Caption ulozi do TMemo).

To s tim SelCount me nenapadlo, ale problem je pokud je vybrana prvni stovka
a pak posledni tisicovka.

Ale i tak je to zlepseni (pokud to nejni nejaky blby pripad).

Ale nevedel by stejne nekdo, jak na to?

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jiri Cincura

13. 8. 2004 17:03

Martin Cajbik wrote:
> Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi
> rychle.

No na 256MB RAM 1,13GHz Celeron na NB to trva 3-4s.  

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Andreas Bednarek

16. 8. 2004 8:45

Mas-li virtualni mod tak mas urcite data ulozena v nejakych vice-mene
vlastnich strukturach (napr. TList).

1. Tady bych zacal a necetl property Item.Caption, ale prochazel sve pole,
to by melo byt rychlejsi, jinak se bude vyvolavat jeste OnData aby
Item.Caption mohlo neco vratit..

2. Vybrane polozky prochazej takto

next_item := Selected;
while next_item <> nil do begin
    //zde zpracuj data ve vlastnim bufferu podle indexu polozky -
next_item.Index;
    next_item := GetNextItem(next_item, sdBelow, [isSelected]);
end;

projdes tak opravdu jen vybrane polozky

vice najdes v helpu u GetNextItem
A.B.


----- Original Message -----
From: "Jiri Cincura" <diskuze@cincura.net>
To: <delphi-l@clexpert.cz>
Sent: Friday, August 13, 2004 4:23 PM
Subject: Hledani v ListView WAS: Mnoho polozek v TListView


> Ahoj,
> chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti
na
> TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve
virtualnim
> modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
> vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde
bych
> si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu
vic
> (pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z
teto
> prekerni situace?
>
> --
> Jiri Cincura
> e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
> ICQ: 314711544
> web: http://www.cincura.net; http://photo.cincura.net
>
>
>
>